import math             #引入math模板，利用里面的一些函数进行数学运算
import datetime         #引入整个datetime包，方便获取今天日期
import sys,time         #引入sys，实现print的逐字输出
def print_one_by_one(text):
    sys.stdout.write("\r " + " " * 60 + "\r") # /r 光标回到行首
    sys.stdout.flush() #把缓冲区全部输出
    for c in text:
        sys.stdout.write(c)
        sys.stdout.flush()
        time.sleep(0.1)

print_one_by_one("\033[31;33m欢      迎       进       入       程       序\033[5m")

print('\033[0m \033[0m') #输出空行

def main():               #在main()方法中从上而下执行

    y_or_n=input('\033[0m是否退出程序（y/n）?:\033[0m')
    while y_or_n == 'n':  #当输入"n"时执行以下程序；反之退出程序。
        print('请输入以下信息，用空格分割')
        input_str = input('性别 体重(kg) 身高(cm) 年龄:') #利用str一次性把所有数据输入
        str_list = input_str.split(' ')                  #str.spilt()字符串分割
        #利用list有序列表的属性，让输入的字符串（str)有序地输入

        try:   #try语句，Python中用来试错的语句，如果输入的信息符合提示的格式，将执行try里面包含的代码
            #利用容器[]一次性输入所有的信息，[0]表示获取第一个元素，[n-1]表示获取第n个元素，以此类推。
            gender = str_list[0]
            weight = float(str_list[1])  #float，允许输入浮点数
            height = float(str_list[2])
            age = int(str_list[3])       #int，将输入的数据取整

            if gender == '男':
                # 男性
                bmr = (13.7 * weight) + (5.0 * height) - (6.8 * age) + 66

            elif gender == '女':
                # 女性
                bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655

            else:
                bmr = -1

            if bmr != -1:

                print('\033[1;35;0m您的性别：{0};身高：{2}厘米;体重：{1}公斤;年龄：{3}岁\033[0m'.format(gender, weight, height, age))
                #重复输出时可以使用数字标记顺序
                print('今天的时间是：',datetime.date.today())     #显示当天时间，方便记录基础代谢率变化
                print('\033[1;46m基础代谢率：{}大卡\033[0m'.format(bmr))    #改变字体样式

            else:
                print('暂不支持该性别')

            #衔接上面的try语句，如果输入的信息不符合要求则执行相应的except代码
        except ValueError:
            #如果输入的信息不符合给出的格式则显示“请输入正确的信息”
            print('\033[1;32;40m请您输入正确的信息！\033[0m')
        except IndexError:
            #如果输入的时候少输入一个或多个数据，则显示“对不起，您输入信息缺失”
            print('\033[1;32;40m 对不起，您输入信息缺失！\033[0m')
        except:
            #如果出现除却以上情况的错误的时候显示“程序异常”
            print('\033[1;35;46m对不起，程序异常\033[0m')

        print() # 输出空行
        y_or_n = input('是否退出程序（y/n）?:')


if __name__ == '__main__':       #测试函数功能，调用下方main函数
    main()
